草庐IT

Java final 与 C++ const

全部标签

c# - C++ dll 将 utf8 作为 const char* 发送,c# 需要做什么……什么?

dll是用c++编写的,通过constchar*回调将文本作为utf8发送。首先,这是声明回调的正确方法吗?[UnmanagedFunctionPointer(CallingConvention.StdCall)]publicdelegatevoidTextCallback(stringsText);[DllImport("cppLib.dll",CharSet=CharSet.Ansi,CallingConvention=CallingConvention.Cdecl)]publicstaticexternvoidGetText([MarshalAs(UnmanagedType.Fu

c++ - 从运算符 T &() 中推导出 const

问题是不同的编译器产生不同的输出(clang/gcc),所以我认为这种用法是未定义的行为。然而,我的目标是在分配引用时推断const。输出:clang-3.6->不是constgcc-4.8.4->常量#include#includestructAnyReference{templateAnyReference(RT&a_var):_ptr(&a_var){}templateoperatorT&()const{if(std::is_const::value){std::cout(_ptr);}void*_ptr;};intmain(){inti(5);AnyReferencea(i);

c++ - 比较对象可作为 const 调用

当我尝试运行以下代码时,带有-std=c++17的clang(6.0)和g++(8)都给我一个static_assert错误:#includestructA{};structProcessComparator{inlinebooloperator()(constA&,constA&){returntrue;}};intmain(void){std::setA_Set;returnEXIT_SUCCESS;}g++8/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_tree.h:457:7:

C++ 模板允许丢弃 const 引用限定符

为什么这段代码可以编译?(使用g++和clang++测试)以下代码用于接受函数并从中创建转发std::function的工厂方法。如您所见,内部的lambda接受constArg&参数并将它们转发给给定的函数。在main()中,我使用factory()创建一个到test_func()的转发器,它接受一个非常量引用参数.我不明白的是为什么这不会产生关于从参数中丢弃const限定符的错误。请注意,确实在main()中创建的类C的实例在传递时没有创建任何拷贝。#include#includeclassC{public:C(){}C(constC&){std::coutstd::functio

c++ - const union成员有什么用?他们不是毫无意义吗?

在对此answer的评论中,Koushik提出了veryvalidpoint.采取以下措施:unionU{intx;constTy;};(我选择T这样这里就没有布局兼容性的通用初始序列,这意味着根据[C++11:9.5/1].)因为任何时候只有一个成员可能是“活跃的”(通过写入使其活跃),并且y不能在初始化后写入,这不是毫无意义吗?我的意思是,y只能在第一次写入x之前被读取,并且只有当y是初始化成员时。我是否遗漏了一些用例?或者这确实是语言功能的毫无意义的融合?(Thishasbeenmentionedbefore) 最佳答案 这是

c++ - 有没有办法检测 const 合格对象的构造?

这个问题在这里已经有了答案:Cananobjectknowitsownconstness?(7个答案)关闭8年前。假设有两个声明:consttypex;//caseatypey;//caseb是否可以在type的构造函数中检测大小写“a”或“b”,以便我可以执行不同的操作?根据标准§12.1/3我们有:Aconstructorcanbeinvokedforaconst,volatileorconstvolatileobject.constandvolatilesemantics(7.1.6.1)arenotappliedonanobjectunderconstruction.Theyc

c++ - const 正确性和安全 bool 习语

我还有一个与安全bool习语相关的问题:typedefvoid(Testable::*bool_type)()const;//constnecessary?voidthis_type_does_not_support_comparisons()const{}//constnecessary?operatorbool_type()const{returnok_?&Testable::this_type_does_not_support_comparisons:0;}为什么bool_type(typedef)和this_type_does_not_support_comparisons是c

c++ - 如何将 Wchar_t* 转换为 const char*

这个问题在这里已经有了答案:Howtoconvert'wchar_t*'to'constchar*'(1个回答)关闭9年前。我是c++的新手,同时在windowsCE.netcompact应用程序上工作尝试将六边形数据写入文件时CStringdataBlock1;dataBlock1="";CStringtemp;for(inti=0;i我收到此错误无法将参数1从wchar*转换为constchar*在使用下面的写入函数将六边形数据写入文件时打开out.write(myReader.dataBlock1.GetBuffer(),myReader.dataBlock1.GetLength

c++ - 从指针 vector 到 const 指针 vector 的重新解释是否安全?

这种转换类型安全吗vectora;constvector&b=reinterpret_cast&>(a);静态转换显然在这种情况下不起作用,因为模板参数正在改变。但是通过重新解释转换,我只是将常量添加到本质上相同的类型。那么对于所有实际用途来说这应该是安全的吗? 最佳答案 就像使用reinterpret_cast将引用转换为不相关的类型一样,它会产生未定义的行为,因此是不安全的,除非您将“安全”定义为“在我的编译器上工作”。 关于c++-从指针vector到const指针vector的重

c++ - list 常量与 C++ 关键字 "const"

阅读Meyers的书(第2项“Preferconstto#define”)我想理解下面列出的一些句子:引用#defineASPECT_RATIO1.653和constaspect_ratio=1.653之间的比较,Meyers提出“......在浮点常量的情况下(例如在这个例子中)使用常量可能会产生比使用​​#define更小的代码。”问题是:Meyers的代码越小,意味着可执行文件的磁盘空间越小?为什么变小了?我认为这在32位系统上可能有效,因为在这种情况下int(或指针)需要4个字节和一个双8字节。因为ASPECT_RATIO可能不会进入符号表,所以名称会被值替换,而在其他情况下可